package cn.eoe.example.timer_and_timertask.ui.login;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.text.Html;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by jiang at 2020/8/17
 */
public  class LoadHelper {
    /**
     *  显示倒计时的 TextView
     */
    private TextView showTimeTV;
    /**
     *  跳转界面的 Activity
     */
    private Activity LoadActivity;
    /**
     * 显示广告界面的imageView
     */
    private ImageView imageView;
    /**
     *  广告界面的图片地址
     */
    private String imageURL;
    /**
     *  点击广告图片后跳转的url地址
     */
    private String ToUrl=null;
    /**
     *  倒计时的最大时间
     */
    private int secondLeft = 3;
    private boolean isRun=false;
    private Timer timer = new Timer();

    public LoadHelper(TextView showTimeTV, Activity loadActivity) {
        this.showTimeTV = showTimeTV;
        LoadActivity = loadActivity;
        showTimeTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StartActivity();
            }
        });
    }
    public LoadHelper(TextView showTimeTV, ImageView imageView,Activity loadActivity) {
        this.imageView=imageView;
        this.showTimeTV = showTimeTV;
        LoadActivity = loadActivity;
        showTimeTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StartActivity();
            }
        });
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StartActivityToUrl(ToUrl);
            }
        });
    }

    /**
     *  调用start方法，来启动倒计时
     *
     *  强烈建议，在activity的Onstart方法中进行
     *
     *  强烈建议，在activity的onDestroy方法调用stop方法
     *  （避免在倒计时启动后，同时又销毁了activity，而出现的异常,）
     */
    public void start(){
        showTimeTV.setText("跳过 "+secondLeft);
        timer.schedule(task, 1000, 1000);
        isRun=true;
    }

    public void start(String imageURL,String ToUrl){
        showTimeTV.setText("跳过 "+secondLeft);
        timer.schedule(task, 1000, 1000);
        isRun=true;
        this.ToUrl=ToUrl;
        //使用Glide设置网络图片
        Glide.with(LoadActivity)
                .load(imageURL)
                .diskCacheStrategy(DiskCacheStrategy.ALL)//本地缓存策略
                .skipMemoryCache(true)//是否进行内存缓存
                .priority(Priority.IMMEDIATE)//加载优先级
                .crossFade()
                .dontAnimate()
                .into(imageView);
    }
    public void start(int id,String ToUrl){
        showTimeTV.setText("跳过 "+secondLeft);
        timer.schedule(task, 1000, 1000);
        isRun=true;
        this.ToUrl=ToUrl;
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        //使用Glide设置网络图片
        Glide.with(LoadActivity)
                .load(id)
                .diskCacheStrategy(DiskCacheStrategy.ALL)//本地缓存策略
                .skipMemoryCache(true)//是否进行内存缓存
                .priority(Priority.IMMEDIATE)//加载优先级
                .crossFade()
                .dontAnimate()
                .into(imageView);
    }
    /**
     * Android 中 Timer 和 TimerTask的使用
     * Android中Timer是一个普通的类，s
     * 其中有几个重要的方法；而TimerTask则是一个抽象类，
     * 其中含有一个抽象方法run()。
     * 使用Timer类中的schedule()方法可以完成对TimerTask的调度，
     * 该方法具有三个参数，其函数声明如下：。
     *
     * public void schedule(TimerTask task, long delay, long period)
     * 其中第一个参数为TimerTask的对象，通过实现其中的run()方法可以周期的执行某一个任务；
     * 第二个参数表示延迟的时间，即多长时间后开始执行；
     * 第三个参数表示执行的周期。
     *
     *使用Timer的cancel()停止操作。当同一个Timer执行一次cancle()方法后，所有Timer线程都被终止。
     */
    private TimerTask task = new TimerTask() {
        @Override
        public void run() {
            LoadActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    secondLeft--;
                    showTimeTV.setText("跳过 " + secondLeft+"S");
                    if (secondLeft < 0&&isRun) {
                        isRun=false;
                        timer.cancel();
                        showTimeTV.setText("倒计时结束");
                        StartActivity();
                    }
                }
            });
        }
    };

    private void StartActivity(){
        Intent intent=new Intent(LoadActivity, LoginActivity.class);
        LoadActivity.startActivity(intent);
        LoadActivity.finish();
    }
    /**
     *  点击imgView后的执行的操作
     *
     *  默认跳转到浏览器指定的网站，你先可以修改成你自己想要的方法
     */
    private void StartActivityToUrl(String ToUrl){
        if (ViewListener!=null){
            ViewListener.ViewCallback();
        }else if (ToUrl!=null){
            Intent intent= new Intent();
            intent.setAction(Intent.ACTION_VIEW); //intent.setAction("android.intent.action.VIEW");
            Uri content_url = Uri.parse(ToUrl);
            intent.setData(content_url);
            LoadActivity.startActivity(intent);
        }
    }
    public int getSecondLeft() {
        return secondLeft;
    }

    public void setSecondLeft(int secondLeft) {
        if (!isRun){
            this.secondLeft = secondLeft;
        }
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    public String getToUrl() {
        return ToUrl;
    }

    public void setToUrl(String toUrl) {
        ToUrl = toUrl;
    }

    public void stop(){
        if (isRun){
            isRun=false;
            timer.cancel();
        }
    }

    private ImageViewListener ViewListener = null;
    /**
     *  你可以使用setImageViewListener方法来实现
     *
     *  点击imgView后的操作
     *
     *  你也可以通过直接修改 StartActivityToUrl 方法来实现
     */
    public void setImageViewListener(ImageViewListener ViewListener) {
        this.ViewListener = ViewListener;
    }

    public interface ImageViewListener {
        void ViewCallback();
    }

}
